<template>
	<view class="container">
		<view class="register-box">
			<!-- 标题 -->
			<h1 class="register-title">公司注册</h1>

			<!-- 输入框：公司账号 -->
			<view class="input-group">
				<text class="label">公司账号（手机号）</text>
				<input v-model="companyAccount" class="input" type="text" placeholder="请输入手机号" />
			</view>

			<!-- 输入框：公司密码 -->
			<view class="input-group">
				<text class="label">公司密码</text>
				<input v-model="companyPassword" class="input" type="password" placeholder="请输入密码" />
			</view>

			<!-- 输入框：公司名称 -->
			<view class="input-group">
				<text class="label">公司名称</text>
				<input v-model="companyName" class="input" type="text" placeholder="请输入公司名称" />
			</view>

			<!-- 输入框：法人 -->
			<view class="input-group">
				<text class="label">法人</text>
				<input v-model="juridicalPerson" class="input" type="text" placeholder="请输入法人姓名" />
			</view>

			<!-- 输入框：公司地址 -->
			<view class="input-group">
				<text class="label">公司地址</text>
				<input v-model="companyAddress" class="input" type="text" placeholder="请输入公司地址" />
			</view>

			<!-- 输入框：公司介绍 -->
			<view class="input-group">
				<text class="label">公司介绍</text>
				<textarea v-model="companyContent" class="textarea" placeholder="请输入公司介绍"></textarea>
			</view>

			<!-- 输入框：公司logo -->
			<view class="input-group">
				<text class="label">公司logo(上传图片需要重命名为xx公司logo)</text>
				<up-upload :fileList="companyLogoList" @afterRead="(event) => afterRead(event, 'companyLogoList')"
					@delete="(event) => deletePic(event, 'companyLogoList')" name="1" multiple :maxCount="1" width="100"
					height="100"></up-upload>
			</view>


			<!-- 输入框：公司图片 -->
			<view class="input-group">
				<text class="label">公司图片(上传图片需要重命名为xx公司风貌展示1-9)</text>
				<up-upload :fileList="companyImageList" @afterRead="(event) => afterRead(event, 'companyImageList')"
					@delete="(event) => deletePic(event, 'companyImageList')" name="1" multiple :maxCount="9"
					width="150" height="100"></up-upload>
			</view>

			<!-- 输入框：公司执照 -->
			<view class="input-group">
				<text class="label">公司执照(上传图片需要重命名为xx公司营业执照)</text>
				<up-upload :fileList="companyLicenseList" @afterRead="(event) => afterRead(event, 'companyLicenseList')"
					@delete="(event) => deletePic(event, 'companyLicenseList')" name="1" multiple :maxCount="1"
					width="150" height="100"></up-upload>
			</view>




		</view>


		<!-- 提交按钮 -->
		<button class="register-btn" @click="handleRegister">注册</button>

		<!-- 跳转到登录页面按钮 -->
		<view class="login-link">
			<text @click="goToLogin">已有账号？点击登录</text>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				companyAccount: '', // 公司账号
				companyPassword: '', // 公司密码
				companyName: '', // 公司名称
				juridicalPerson: '', // 法人
				companyAddress: '', // 公司地址
				companyContent: '', // 公司介绍
				companyLogoList: [], //logo列表
				companyLogo: '', //传后端的logo
				companyImageList: [],
				companyImage: '',
				companyLicenseList: [],
				companyLicense: ''
			};
		},
		methods: {

			// 删除图片
			deletePic(event, listType) {
				console.log(this[listType]);
				this[listType].splice(event.index, 1);
			},

			// 新增图片
			async afterRead(event, listType) {
				let lists = [].concat(event.file);
				let fileListLen = this[listType].length;

				// 文件名校验及重复图片检查
				for (let i = 0; i < lists.length; i++) {
					const file = lists[i];
					const fileName = file.name;

					// 校验文件名
					if (!this.isValidFileName(fileName, listType)) {
						uni.showToast({
							title: `文件名不符合要求`,
							icon: 'none',
						});
						return;
					}

					// 检查是否已有相同图片
					if (this.isDuplicateImage(file, listType)) {
						uni.showToast({
							title: `该图片已上传`,
							icon: 'none',
						});
						return;
					}

					// 更新列表状态为上传中
					this[listType].push({
						...file,
						status: 'uploading',
						message: '上传中'
					});
				}

				// 循环上传
				for (let i = 0; i < lists.length; i++) {
					const result = await this.uploadFilePromise(lists[i].url);
					let item = this[listType][fileListLen];
					this[listType].splice(
						fileListLen,
						1,
						Object.assign(item, {
							status: 'success',
							message: '',
							url: result
						})
					);
					fileListLen++;
				}
			},

			// 上传文件
			uploadFilePromise(url) {
				return new Promise((resolve, reject) => {
					let a = uni.uploadFile({
						url: 'api/recruit-fileUpload/files/upload', // 上传的接口地址
						filePath: url,
						name: 'file',
						formData: {
							user: 'test' // 可以根据需求调整表单数据
						},
						success: (res) => {
							if (res.statusCode === 200) {
								resolve(res.data);
							} else {
								reject(`上传失败，状态码：${res.statusCode}`);
							}
						},
						fail: (err) => {
							reject(`上传失败，错误信息：${err.errMsg}`);
						}
					});
				});
			},

			// 校验文件名是否合法
			isValidFileName(fileName, listType) {
				let regex;

				switch (listType) {
					case 'companyLogoList':
						// 公司Logo文件名规则：公司名称 + "公司logo"
						regex = new RegExp(`^${this.companyName}logo\\.(jpg|jpeg|png|gif)$`, 'i');
						break;
					case 'companyImageList':
						// 公司图片文件名规则：公司名称 + "公司风貌展示1-9"
						regex = new RegExp(`^${this.companyName}风貌展示[1-9]\\.(jpg|jpeg|png|gif)$`, 'i');
						break;
					case 'companyLicenseList':
						// 公司执照文件名规则：公司名称 + "营业执照"
						regex = new RegExp(`^${this.companyName}营业执照\\.(jpg|jpeg|png|gif)$`, 'i');
						break;
					default:
						return false;
				}

				console.log(`校验文件名：${fileName}, 正则：${regex}, 匹配结果：${regex.test(fileName)}`);
				return regex.test(fileName);
			},

			// 检查是否存在重复图片
			isDuplicateImage(newFile, listType) {
				const existingFiles = this[listType];

				// 判断是否有相同的文件（通过文件名或者文件内容来判断）
				for (let file of existingFiles) {
					// 如果文件名相同或者文件内容相同（你可以根据实际情况决定如何判断）
					if (file.name === newFile.name) {
						return true; // 已经有重复文件
					}
				}

				return false; // 没有重复文件
			},




			// 处理注册
			handleRegister() {
				// 校验必填字段
				const errorMessage = this.validateFields([{
						name: '公司账号',
						value: this.companyAccount
					},
					{
						name: '公司密码',
						value: this.companyPassword
					},
					{
						name: '公司名称',
						value: this.companyName
					},
					{
						name: '公司法人',
						value: this.juridicalPerson
					},
					{
						name: '公司地址',
						value: this.companyAddress
					},
					{
						name: '公司logo',
						value: this.companyLogoList && this.companyLogoList.length > 0 ? this.companyLogoList[0] :
							null
					},
					{
						name: '营业执照',
						value: this.companyLicenseList && this.companyLicenseList.length > 0 ? this
							.companyLicenseList[0] : null
					},
				]);

				// 如果有错误，提示错误信息并退出
				if (errorMessage) {
					uni.showToast({
						title: errorMessage,
						icon: 'none'
					});
					return;
				}

				// 发起注册请求
				uni.request({
					url: '/api/recruit-CompanyRegister/company/companyRegister', // 记得加上协议部分
					method: 'POST',
					data: {
						companyAccount: this.companyAccount,
						companyPassword: this.companyPassword, // 可以加密密码
						companyName: this.companyName,
						juridicalPerson: this.juridicalPerson,
						companyAddress: this.companyAddress,
						companyContent: this.companyContent,
						companyLogo: this.companyLogoList && this.companyLogoList[0].name || '',
						companyImage: this.companyImageList.length > 0 ? this.companyImageList.map(item => item
							.name).join('(^&^)') : '', // 拼接URL
						companyStatus: '未审核',
						companyLicense: this.companyLicenseList && this.companyLicenseList[0].name || ''
					},
					success: (res) => {
						if (res.data.code === 0) {
							// 注册成功，跳转到登录界面
							uni.navigateTo({
								url: '/pages/companyLogin/companyLogin'
							});
						} else {
							// 如果有具体的错误码和消息可以提示
							uni.showToast({
								title: res.data.message || '注册失败',
								icon: 'none'
							});
						}
					},
					fail: (err) => {
						// 网络请求失败的提示
						uni.showToast({
							title: '网络错误，请稍后再试',
							icon: 'none'
						});
					}
				});
			},

			// 校验字段
			validateFields(fields) {
				for (let i = 0; i < fields.length; i++) {
					const field = fields[i];
					if (!field.value || (Array.isArray(field.value) && field.value.length === 0)) {
						return `${field.name}是必填的`;
					}
				}
				return null; // 返回 null 表示没有错误
			},

			// 跳转到登录页面
			goToLogin() {
				uni.navigateTo({
					url: '/pages/companyLogin/companyLogin'
				});
			}
		},
	};
</script>


<style scoped>
	.container {
		padding: 20px;
	}

	.register-box {
		width: 100%;
		max-width: 500px;
		margin: 0 auto;
		padding: 20px;
		border: 1px solid #eaeaea;
		border-radius: 8px;
		background-color: #fff;
	}

	.register-title {
		font-size: 24px;
		text-align: center;
		margin-bottom: 20px;
	}

	.input-group {
		margin-bottom: 20px;
	}

	.label {
		font-size: 14px;
		color: #333;
		display: block;
		margin-bottom: 8px;
	}

	.image-preview {
		margin-top: 10px;
	}

	.uploaded-image {
		width: 100%;
		height: 100%;
		object-fit: cover;
		border-radius: 4px;
	}

	.input,
	.textarea {
		width: 100%;
		padding: 8px;
		border: 1px solid #ddd;
		border-radius: 4px;
		font-size: 14px;
	}

	.textarea {
		height: 120px;
	}

	.register-btn {
		width: 100%;
		padding: 12px;
		background-color: #007aff;
		color: white;
		border: none;
		border-radius: 4px;
		font-size: 16px;
		cursor: pointer;
	}

	.register-btn:hover {
		background-color: #005bb5;
	}

	.login-link {
		margin-top: 20px;
		text-align: center;
	}

	.login-link text {
		color: #007aff;
		font-size: 14px;
		text-decoration: underline;
		cursor: pointer;
	}
</style>